# -*- coding: utf-8 -*-
import sys
import locale
 
u = '汉'
print repr(u) # u'\u6c49'
s = u.encode('UTF-8')
print repr(s) # '\xe6\xb1\x89'
u2 = s.decode('UTF-8')
print repr(u2) # u'\u6c49'

# s2 = u.decode('UTF-8')

# u2 = s.encode('UTF-8')
## 在python中，使用unicode类型作为编码的基础类型。即
#     decode              encode
#str ---------> unicode --------->str

u = u'中文' #显示指定unicode类型对象u
print u

str = u.encode('gb2312') #以gb2312编码对unicode对像进行编码
print str
u1 = str.decode('gb2312')#以gb2312编码对字符串str进行解码，以获取unicode
print(u1)

str1 = u.encode('gbk') #以gbk编码对unicode对像进行编码
print str1
print str1.decode('gbk')

str2 = u.encode('utf-8') #以utf-8编码对unicode对像进行编码
print str2
u2 = str2.decode('utf-8')#如果以utf-8的编码对str进行解码得到的结果，将无法还原原来的unicode类型
print(u2)

def p(f):
    print '%s.%s(): %s' % (f.__module__, f.__name__, f())
 
# 返回当前系统所使用的默认字符编码
p(sys.getdefaultencoding)
 
# 返回用于转换Unicode文件名至系统文件名所使用的编码
p(sys.getfilesystemencoding)
 
# 获取默认的区域设置并返回元祖(语言, 编码)
p(locale.getdefaultlocale)
 
# 返回用户设定的文本数据编码
# 文档提到this function only returns a guess
p(locale.getpreferredencoding)
 
# \xba\xba是'汉'的GBK编码
# mbcs是不推荐使用的编码，这里仅作测试表明为什么不应该用
print r"'\xba\xba'.decode('mbcs'):", repr('\xba\xba'.decode('mbcs'))
 
#在笔者的Windows上的结果(区域设置为中文(简体, 中国))
#sys.getdefaultencoding(): gbk
#sys.getfilesystemencoding(): mbcs
#locale.getdefaultlocale(): ('zh_CN', 'cp936')
#locale.getpreferredencoding(): cp936
#'\xba\xba'.decode('mbcs'): u'\u6c49'